﻿using System;
using System.Collections.Generic;
using System.Threading;
using System.Linq;
using System.Text;
using Microsoft.ServiceHosting.ServiceRuntime;
using System.Net;
using Microsoft.Samples.ServiceHosting.StorageClient;

using ZeCloud.TekFriends.Metier.Table;
using ZeCloud.TekFriends.Metier;


namespace Resto55Business_WorkerRole_Tests
{
    public class WorkerRole : RoleEntryPoint
    {
        public override void Start()
        {

            RoleManager.WriteToLog("Information", "Worker Process entry point called : starting...");

            bool runDemo = true;
            if (runDemo)
            {
                // [PENDING] Création du schéma 
                // Ou vérification que le schéma existe

                // Steve : Attente pour faciliter le debugging
                Thread.Sleep(5 * 1000);

                RunBusinessLogic();
            }

            bool clearDB = false;
            if (clearDB)
            {
                // [PENDING] Création du schéma 
                // Ou vérification que le schéma existe

                // Steve : Attente pour faciliter le debugging
                Thread.Sleep(5 * 1000);

                //ClearAzureStorage();
            }

            Thread.Sleep(60 * 1000);

            RoleManager.WriteToLog("Information", "Worker Process entry point called : completed");

        }

        public override RoleStatus GetHealthStatus()
        {
            // This is a sample worker implementation. Replace with your logic.
            return RoleStatus.Healthy;
        }


        public void RunBusinessLogic()
        {
            var greg = BusinessFacade.CreerFacade().GetTekFriendsService().CreerPersonne("gregory.ott@gmail.com", "gregory.ott@gmail.com", "Lyon", "OTT", "Greg");
            if (greg == null)
            {
                RoleManager.WriteToLog("Warning", "Personne could not be created");
            }
            RoleManager.WriteToLog("Information", "Personne created");

            var ben = BusinessFacade.CreerFacade().GetTekFriendsService().CreerPersonne("benji_dv@msn.com", "benji_dv@msn.com", "VilleFranche", "DV", "Benjamin");
            if (ben == null)
            {
                RoleManager.WriteToLog("Warning", "Personne could not be created");
            }
            RoleManager.WriteToLog("Information", "Personne created");

            BusinessFacade.CreerFacade().GetTekFriendsService().CreerReseau("gregory.ott@gmail.com", "benji_dv@msn.com");

            //// Recherche des restaurants
            //var restos = BusinessFacade.CreerFacade().GetRestoService().RechercherRestosParVille("ZeCloud");
            //Resto dernierResto = null;
            //foreach (var i in restos.AsEnumerable<Resto>())
            //{
            //    dernierResto = i;
            //    RoleManager.WriteToLog("Information", "Resto in " + i.ville);
            //}

            //// Recherche des villes 
            //var villes = BusinessFacade.CreerFacade().GetRestoService().RechercherVillesDemarrantPar("ZeC");

            //foreach (var i in villes.AsEnumerable<String>())
            //{

            //    RoleManager.WriteToLog("Information", "Ville commencant par ZeC " + i);
            //}

            //// Créer un plat dans un restaurant
            //if (dernierResto != null)
            //{
            //    var element = BusinessFacade.CreerFacade().GetRestoService().CreerElement(dernierResto.uniqueId, "Coca", "Boisson", "Du coca-cola zéro");
            //    if (element != null)
            //    {
            //        RoleManager.WriteToLog("Information", "Création d'un élément " + element.Description);
            //    }
            //    else
            //    {
            //        RoleManager.WriteToLog("Warning", "L'élément existe déjà ");
            //    }


            //    // Récupérer la liste des éléments dans un restaurant
            //    var elements = BusinessFacade.CreerFacade().GetRestoService().RechercherElementsPourResto(dernierResto.uniqueId);
            //    Element dernierElement = null;
            //    foreach (var i in elements.AsEnumerable<Element>())
            //    {
            //        dernierElement = i;
            //        RoleManager.WriteToLog("Information", "Element " + i.Title + ", " + i.Description);
            //    }

            //    // Ajouter un prix sur un élément d'un restaurant
            //    if (dernierElement != null)
            //    {
            //        //var nouveauPrix = null;
            //        //BusinessFacade.CreerFacade().GetRestoService().AjouterPrix(dernierElement.GetElementID(), 3.5);
            //        //RoleManager.WriteToLog("Information", "Création d'un prix à la date " + nouveauPrix.dateSaisie + ", " + nouveauPrix.idAuteur);
            //    }

            // Récupérer la liste des prix 
            //var prix = BusinessFacade.CreerFacade().GetRestoService().RechercherPrixPourElement(dernierElement.GetElementID());
            //DetailPrix dernierPrix = null;
            //foreach (var i in prix.AsEnumerable<DetailPrix>())
            //{
            //    dernierPrix = i;
            //    RoleManager.WriteToLog("Information", "DetailPrix " + i.prix + ", saisi le " + i.dateSaisie + ", par " + i.idAuteur);
            //}
            //}

            RoleManager.WriteToLog("Information", "Test done");


        }


        //public void ClearAzureStorage()
        //{
        //    // Supprimer les restaurants de la ville
        //    var restos = BusinessFacade.CreerFacade().GetRestoService().RechercherRestosParVille("ZeCloud");
        //    foreach (var r in restos.AsEnumerable<Resto>())
        //    {
        //        BusinessFacade.CreerFacade().GetRestoService().SupprimerResto(r);
        //    }

        //    // Supprimer les restaurants de la ville
        //    var restos2 = BusinessFacade.CreerFacade().GetRestoService().RechercherRestosParVille("ZeCloud2");
        //    foreach (var r in restos2.AsEnumerable<Resto>())
        //    {
        //        BusinessFacade.CreerFacade().GetRestoService().SupprimerResto(r);
        //    }


        //    RoleManager.WriteToLog("Information", "Test done");


        //}
    }
}
